package model

import (
	"github.com/go-gin-admin/global"
)

// 定义方法
type IJob interface {
	Add() (int64, error)                                          // 增加岗位
	GetList(pageIndex int64, pageSize int64) (interface{}, error) // 获取岗位分页列表
	Update() error                                                // 更新岗位
	Remove(id int64) error                                        // 删除岗位
}

// 定义结构体
type Job struct {
	JobId   int64  `json:"jobId" gorm:"primary_key"`   // 主键
	JobName string `json:"jobName"`                    // 岗位名称
	JobCode string `json:"jobCode"`                    // 岗位编码
	Sort    int64  `json:"sort"`                       // 排序
	Remark  string `json:"remark"`                     // 备注
	DelFlag string `json:"delFlag" gorm:"default:'0'"` // 删除标识符

	BaseModel
}

// 增加岗位
func (j *Job) Add() (int64, error) {
	table := global.GDB.Table("sys_job")
	if err := table.Create(&j).Error; err != nil {
		return 0, err
	}
	return j.JobId, nil
}

// 获取岗位
func (j *Job) GetList(pageIndex int64, pageSize int64) (interface{}, error) {
	var jobs []Job
	var total int64
	table := global.GDB.Table("sys_job")
	table = table.Select("job_id, job_name, job_code, sort, remark, create_time, update_time, del_flag")
	table = table.Where("del_flag = ?", "0")
	if err := table.Count(&total).Error; err != nil {
		return jobs, err
	}
	table = table.Offset((pageIndex - 1) * pageSize).Limit(pageSize)
	if err := table.Find(&jobs).Error; err != nil {
		return jobs, err
	}

	m := make(map[string]interface{})
	m["item"] = jobs
	m["total"] = total
	return m, nil
}

// 获取所有岗位
func (j *Job) GetAllList() (interface{}, error) {
	var jobs []Job
	table := global.GDB.Table("sys_job")
	table = table.Select("job_id, job_name, job_code, sort, remark, create_time, update_time, del_flag")
	table = table.Where("del_flag = ?", "0")
	if err := table.Find(&jobs).Error; err != nil {
		return jobs, err
	}

	m := make(map[string]interface{})
	m["item"] = jobs
	return m, nil

}

// 更新岗位
func (j *Job) Update() error {
	table := global.GDB.Table("sys_job")
	table = table.Where("job_id = ?", j.JobId)
	if err := table.Updates(map[string]interface{}{"job_name": j.JobName, "job_code": j.JobCode, "sort": j.Sort, "remark": j.Remark, "update_time": j.UpdateTime}).Error; err != nil {
		return err
	}
	return nil
}

// 删除岗位
func (j *Job) Remove(id int64) error {
	table := global.GDB.Table("sys_job")
	table = table.Where("job_id = ?", id)
	if err := table.Update("del_flag", "1").Error; err != nil {
		return err
	}
	return nil
}
